home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / i / magicstr.i < prev    next >
Encoding:
Modula Implementation  |  1997-10-26  |  6.7 KB  |  200 lines

  1. (*----------------------------------------------------------------------*
  2.  *                                                                      *
  3.  *         MAGIC   Modula's  All purpose  GEM  Interface  Cadre         *
  4.  *                 ÿ         ÿ            ÿ    ÿ          ÿ             *
  5.  *----------------------------------------------------------------------*
  6.  * Version 3.30  02.02.1992     (C)90/91/92 by Peter Hellinger Software *
  7.  *----------------------------------------------------------------------*
  8.  *            Dieses Modul ist urheberrechtlich geschtzt.              *
  9.  *                                                                      *
  10.  * Die Ver”ffentlichung des Quelltextes oder Teilen daraus in schrift-  *
  11.  * licher Form, insbesondere in Zeitschriften, sowie die Verbreitung    *
  12.  * ber Public-Domain-H„ndler bedarf der ausdrcklichen schriftlichen   *
  13.  * Genehmigung des Autors!                                              *
  14.  *                                                                      *
  15.  * Der Autor gibt hiermit die ausdrckliche Erlaubnis, das Modul jeder- *
  16.  * zeit auch im Quelltext weiterzugegeben, sofern dessen Text und ins-  *
  17.  * besondere dieser Urheberrechts-Vermerk nicht ver„ndert wird, und     *
  18.  * durch die Weitergabe kein finanzieller Nutzen entsteht. Der Autor    *
  19.  * beh„lt sich das Recht vor, diese Erlaubnis jederzeit u. ohne Angaben *
  20.  * von Grnden zu widerrufen.                                           *
  21.  *----------------------------------------------------------------------*)
  22.  
  23. IMPLEMENTATION MODULE MagicStrings;
  24.  
  25. (*----------------------------------------------------------------------*
  26.  * Original (C) by Johannes Leckebusch/Peter Hellinger   MM2-Modula-2   *
  27.  *                                                                      *
  28.  * In diesem Modul werden fr Index-Z„hler INTEGER-Variable benutzt,    *
  29.  * weil es sonst bei Ausdrcken der Form "Laenge - 1" zu Bereichsfehler *
  30.  * kommt, wenn L„nge = 0 und L„nge = TYPE CARDINAL.                     *
  31.  *----------------------------------------------------------------------*
  32.  * Int. Vers | Datum    | Name | Žnderung                               *
  33.  *-----------+----------+------+----------------------------------------*
  34.  *  3.00     | 18.01.92 |  Hp  |                                        *
  35.  *-----------+----------+------+----------------------------------------*)
  36.  
  37.  
  38.  
  39. (* IMPLEMENTATION FšR  >>> Megamax-Modula-2 <<< *)
  40. (*                                              *)
  41. (*$R-   Range-Checks                            *)
  42. (*$S-   Stack-Check                             *)
  43. (*                                              *)
  44. (*----------------------------------------------*)
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
  52.                         Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
  53.                         Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
  54.                         sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
  55.                         CastToChar, CastToByte, CastToByteset, CastToInt,
  56.                         CastToCard, CastToBitset, CastToWord, CastToLInt,
  57.                         CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
  58.                         TosVersion, Accessory, Basepage, SysHeader, TosDate;
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66. IMPORT Strings;
  67.  
  68. CONST   Ch0 =   0C;
  69.  
  70. PROCEDURE Length (REF str: ARRAY OF CHAR): sCARDINAL;
  71. BEGIN
  72.  RETURN LENGTH (str); 
  73. END Length;
  74.  
  75. PROCEDURE Compare (REF s1, s2: ARRAY OF CHAR): Relation;
  76. VAR equ: Strings.Relation;
  77. BEGIN
  78.  equ:= Strings.Compare (s1, s2);
  79.  CASE equ OF
  80.   Strings.less:    RETURN less;|
  81.   Strings.equal:   RETURN equal;|
  82.   Strings.greater: RETURN greater;|
  83.  END;
  84. END Compare;
  85.  
  86. PROCEDURE Equal (REF s1, s2: ARRAY OF CHAR): BOOLEAN;
  87. BEGIN
  88.  RETURN Strings.StrEqual (s1, s2);
  89. END Equal;
  90.  
  91.  
  92.  
  93.  
  94.  
  95. PROCEDURE Assign (REF q: ARRAY OF CHAR; VAR z: ARRAY OF CHAR);
  96. VAR i, l, hq, hz: sCARDINAL;
  97. BEGIN
  98.  FOR i:= 0 TO HIGH (z) DO
  99.   IF (i > HIGH (q)) OR (q[i] = Ch0) THEN  z[i]:= Ch0;  RETURN;  END;
  100.   z[i]:= q[i];
  101.  END;
  102. END Assign;
  103.  
  104. PROCEDURE Pos (REF substr, str: ARRAY OF CHAR;
  105.                start: sCARDINAL; dowild: BOOLEAN): sCARDINAL;
  106. CONST wild =  '*';
  107.       joker = '?';
  108. VAR s, j, jl, sl, maxs, max, pos: CARDINAL;
  109.     ch: CHAR ;
  110. BEGIN
  111.  jl:= Length (substr);  sl:= Length (str);  max:= HIGH (str) + 1;  pos:= 0;
  112.  IF (jl = 0) OR (sl = 0) OR (start + jl > sl) THEN  RETURN max; END;
  113.  maxs:= sl - jl;
  114.  LOOP (* 1 *)
  115.   j:= 0;
  116.   s:= start;
  117.   LOOP (* 2 *)
  118.    WHILE (substr[j] # 0C) AND
  119.          (dowild AND ((substr[j] = wild) OR (substr[j] = joker))) AND
  120.          (str[s] # 0C) DO
  121.     ch:= substr[j];  INC (j);
  122.     IF (ch = wild) AND dowild THEN
  123.      ch:= substr[j];
  124.      WHILE (str[s] # ch) AND (str[s] # 0C) DO  INC (s);  END;
  125.     ELSE
  126.      INC (s);
  127.     END;
  128.    END; (* WHILE *)
  129.    IF j >= jl THEN  RETURN start;  END;
  130.    IF substr[j] # str[s] THEN  EXIT; (* 2 *)  END;
  131.    INC (j);
  132.    INC (s);
  133.    IF j >= jl THEN  RETURN start;  END;
  134.   END; (* 2 *)
  135.   INC (start);
  136.   IF start > maxs THEN  RETURN max; END;
  137.  END; (* 1 *)
  138.  RETURN max;
  139. END Pos;
  140.  
  141. PROCEDURE Insert (REF substr: ARRAY OF CHAR; VAR str: ARRAY OF CHAR; inx: sCARDINAL);
  142. VAR i, in, h, l, l1: sINTEGER;
  143. BEGIN
  144.  l1:= Length (substr);  h:= HIGH (str);  in:= inx;
  145.  IF l1 = 0 THEN RETURN END;
  146.  l:= Length (str);  l:= l + l1 - 1;
  147.  FOR i:= l TO (in + l1) BY -1 DO  str[i]:= str[i - l1];  END;
  148.  IF (l + 1) <= h THEN str [l + 1]:= Ch0; END;
  149.  FOR i:= 0 TO l1 - 1 DO  str[i + in]:= substr[i];  END;
  150. END Insert;
  151.  
  152. PROCEDURE Delete (VAR str: ARRAY OF CHAR; inx, len: sCARDINAL);
  153. VAR i, l, h, in, le: sINTEGER;
  154. BEGIN
  155.  l:= Length (str);  in:= inx;  le:= len;  h:= HIGH (str);
  156.  FOR i:= in TO (l - le) - 1 DO  str[i]:= str[i + le];  END;
  157.  IF (l - le) <= h THEN  str[l - le]:= Ch0;
  158.  END;
  159. END Delete;
  160.  
  161. PROCEDURE Append (REF substr: ARRAY OF CHAR; VAR str: ARRAY OF CHAR);
  162. VAR i, j, l: sCARDINAL;
  163. BEGIN
  164.  l:= Length (str);  j:= 0;
  165.  FOR i:= l TO HIGH (str) DO
  166.   IF (substr[j] = Ch0) OR (j > HIGH (substr)) THEN
  167.    str[i]:= Ch0; 
  168.    RETURN;
  169.   END;
  170.   str[i]:= substr[j];  INC (j);
  171.  END;
  172. END Append;
  173.  
  174. PROCEDURE Copy (REF str: ARRAY OF CHAR; inx, len: sCARDINAL;
  175.                 VAR result: ARRAY OF CHAR);
  176. VAR i, in, le, h: sINTEGER;
  177. BEGIN
  178.  in:= inx;  le:= len;  h:= HIGH (result);
  179.  FOR i:= 0 TO le - 1 DO  result[i]:= str[in + i];  END;
  180.  IF le <= h THEN  result [le]:= Ch0;  END;
  181. END Copy;
  182.  
  183.  
  184. PROCEDURE CAPS (VAR str: ARRAY OF CHAR);
  185. VAR c: sCARDINAL;
  186. BEGIN
  187.  FOR c:= 0 TO HIGH (str) DO
  188.   IF str[c] = 0C THEN  RETURN;  END;
  189.   str[c]:= Cap (str[c]);
  190.  END;
  191. END CAPS;
  192.  
  193. PROCEDURE Cap (ch: CHAR): CHAR;
  194. BEGIN
  195.    RETURN CAP (ch);   (* MM2 konvertiert selbst *)
  196.  
  197. END Cap;
  198.  
  199. END MagicStrings.
  200.